package com.jwtter.generator.utils;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.RandomAccessFile;

/**
 * @description
 * @date 2016年9月10日
 * @company 广东东升信息技术有限公司
 * @author jinwt
 */
public class FileAppendUtil {

	/**
	 * @date 2016年9月14日
	 * @description 利用 FileOutputStream 对进件进行追加
	 */
	public static void bufferedWriterMethod(String file, String conent) {
		BufferedWriter out = null;
		try {
			out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file, true)));
			out.write(conent);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if (out != null) {
					out.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

	/**
	 * 追加文件：使用FileWriter 跟上一方法相同
	 * 
	 * @param fileName
	 * @param content
	 */
	public static void fileWriterMethod(String fileName, String content) {
		FileWriter writer = null;
		try {
			// 打开一个写文件器，构造函数中的第二个参数true表示以追加形式写文件
			writer = new FileWriter(fileName, true);
			writer.write(content);
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if (writer != null) {
					writer.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

	/**
	 * 追加文件：使用RandomAccessFile 调用系统底层的文件读写方法
	 * 
	 * @param fileName
	 *            文件名
	 * @param content
	 *            追加的内容
	 */
	public static void randomAccessFileMethod(String fileName, String content) {
		RandomAccessFile randomFile = null;
		try {
			// 打开一个随机访问文件流，按读写方式
			randomFile = new RandomAccessFile(fileName, "rw");
			// 文件长度，字节数
			long fileLength = randomFile.length();
			// 将写文件指针移到文件尾。
			randomFile.seek(fileLength);
			// 防止乱码
			if (StringUtils.isNotBlank(content)) {
				randomFile.write(content.getBytes());
			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (randomFile != null) {
				try {
					randomFile.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}

	/**
	 * 
	 * @param content
	 * @date 2016年9月11日
	 * @description 编写一行即换行
	 */
	public static void writeLine(String fileName, String content) {
		randomAccessFileMethod(fileName, content + "\n");
	}

	public static void main(String[] args) {
		try {
			File file = new File("text.txt");
			if (file.createNewFile()) {
				System.out.println("Create file successed");
			}
			bufferedWriterMethod("text.txt", "123method1");
			fileWriterMethod("text.txt", "123method2");
			writeLine("text.txt", "123method3");
		} catch (Exception e) {
			System.out.println(e);
		}
	}
}
